package com.ys.day31.p3FastJson;

import com.alibaba.fastjson.JSON;


/**
 * 描述:
 * P1FastJson解析与解析
 * @author CodeYang
 * @version 2021/1/18 13:30
 */
public class P1FastJson解析 {

    
    public static void main(String[] args) {

        //function01();
        function02();

    }

    /**
     * 使用FASTJSON将远程服务器的JSON数据下载到本地，并且转换为Java对象
     * 总结: 1 你只需要将需要转换的Class对象交给 FastJson ,它会自己去使用反射来创建对象,然后将数据转为java返回给你
     */
    private static void function02() {

        final String URL_PATH = "https://douhuvillage.cn/json/1.json";

        String jsonData = null;
        try {
            jsonData = JSONUtils.downJsonData(URL_PATH);
            System.out.println(jsonData);
            /**
             * 将JSON对象转换为指定的Java对象，该方法支持泛型。参数1：JSON对象，参数2：要转换的Java对象对应的Class对象(每个字节码都有自己唯一的Class对象)
             * 注意：我们要转换为什么类型的Java对象，就传入它对应的Class对象，FastJSON自动帮你去识别最终返回具体的对象(Worker)
             *
             * 职业 FastJson 可以帮我们根据 传入的类对象自动去匹配,内部是利用了反射 遍历了所有的字段
             */
            Worker worker = JSON.parseObject(jsonData, Worker.class);
            System.out.println(worker);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 创建普通Java对象将其转换为JSON对象
     * 
     */
    private static void function01() {
        Worker worker = new Worker(300,"Tom",3011,1.8);
        /**
         * FastJSON提供了很多工具方法
         * 以to开头的方法：将Java对象转换为JSON对象 ，此时toJSONString()方法表示：Java对象到JSON字符串
         *
         * 以pase开头的就是把 java对象转为json对象
         * 注意: FastJson 不支持中文包名
         */
        String jsonString = JSON.toJSONString(worker);
        System.out.println(jsonString);
    }
}
